%% Modelo adaptado de abtex2-modelo-trabalho-academico.tex, v-1.8 laurocesar
%% Copyright 2012-2013 by abnTeX2 group at http://abntex2.googlecode.com/ 
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%%   http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%% 
%% The Current Maintainer of this work is the abnTeX2 team, led
%% by Lauro César Araujo. Further information are available on 
%% http://abntex2.googlecode.com/

%%******************************************************
%%******************************************************
%% This work consists of the files:
%% abntex2-modelo-trabalho-academico-TCC-EngaEletrica.tex,
%% abntex2-modelo-references.bib
%%******************************************************
%%******************************************************

% ------------------------------------------------------------------------
% ------------------------------------------------------------------------
% abnTeX2: Modelo de Trabalho Academico (tese de doutorado, dissertacao de
% mestrado e trabalhos monograficos em geral) em conformidade com 
% ABNT NBR 14724:2011: Informacao e documentacao - Trabalhos academicos -
% Apresentacao
% ------------------------------------------------------------------------
% ------------------------------------------------------------------------

\documentclass[
	% -- opções da classe memoir --
	12pt,				% tamanho da fonte
	openright,			% capítulos começam em pág ímpar (insere página vazia caso preciso)
	twoside,			% para impressão em verso e anverso. Oposto a oneside
	a4paper,			% tamanho do papel. 
	% -- opções da classe abntex2 --
	%chapter=TITLE,		% títulos de capítulos convertidos em letras maiúsculas
	%section=TITLE,		% títulos de seções convertidos em letras maiúsculas
	%subsection=TITLE,	% títulos de subseções convertidos em letras maiúsculas
	%subsubsection=TITLE,% títulos de subsubseções convertidos em letras maiúsculas
	% -- opções do pacote babel --
	english,			% idioma adicional para hifenização
	brazil,				% o último idioma é o principal do documento
	]{abntex2}


% ---
% PACOTES
% ---

% ---
% Pacotes fundamentais 
% ---
\usepackage{cmap}			% Mapear caracteres especiais no PDF
\usepackage{lmodern}			% Usa a fonte Latin Modern			
\usepackage[T1]{fontenc}		% Selecao de codigos de fonte.
\usepackage[utf8]{inputenc}		% Codificacao do documento (conversão automática dos acentos)
\usepackage{lastpage}			% Usado pela Ficha catalográfica
\usepackage{indentfirst}		           % Indenta o primeiro parágrafo de cada seção.
\usepackage{color}				% Controle das cores
\usepackage{graphicx}			% Inclusão de gráficos
% ---
		
% ---
% Pacotes adicionais, usados apenas no âmbito do Modelo Canônico do abnteX2
% ---
\usepackage{lipsum}			% para geração de dummy text
% ---

% ---
% Pacotes de citações
% ---
\usepackage[brazilian,hyperpageref]{backref}   % Paginas com as citações na bibl
\usepackage[alf]{abntex2cite}	                         % Citações padrão ABNT

% --- 
% CONFIGURAÇÕES DE PACOTES
% --- 

% ---
% Configurações do pacote backref
% Usado sem a opção hyperpageref de backref
\renewcommand{\backrefpagesname}{Citado na(s) página(s):~}
% Texto padrão antes do número das páginas
\renewcommand{\backref}{}
% Define os textos da citação
\renewcommand*{\backrefalt}[4]{
	\ifcase #1 %
		Nenhuma citação no texto.%
	\or
		Citado na página #2.%
	\else
		Citado #1 vezes nas páginas #2.%
	\fi}%
% ---


% ---
% Informações de dados para CAPA e FOLHA DE ROSTO
% ---
\titulo{Desenvolvimento de uma aplicação de mensagens instantâneas para sistemas Android utilizando
a plataforma de desenvolvimento Qt}
\autor{<Luiz Guilherme Brant Machado>}
\local{Belo Horizonte}
\data{2013}
\orientador{Prof. Renato Cardoso Mesquita}
%\coorientador{Prof. }
\instituicao{%
  Universidade Federal de Minas Gerais -- UFMG
  \par
  Escola de Engenharia
  \par
  Curso de Graduação em Engenharia Elétrica}
\tipotrabalho{Trabalho de Conclusão de Curso}

% O preambulo deve conter o tipo do trabalho, o objetivo, o nome da instituição e a área de concentração 
\preambulo{Monografia apresentada durante o Seminário dos Trabalhos de Conclusão do Curso de Graduação em Engenharia Elétrica da UFMG, como parte dos requisitos necessários à obtenção do título de Engenheiro Eletricista.}
% ---

% ---
% Configurações de aparência do PDF final

% alterando o aspecto da cor azul
\definecolor{blue}{RGB}{41,5,195}

% informações do PDF
\makeatletter
\hypersetup{
     	%pagebackref=true,
		pdftitle={\@title}, 
		pdfauthor={\@author},
    	pdfsubject={\imprimirpreambulo},
	    pdfcreator={LaTeX with abnTeX2},
		pdfkeywords={abnt}{latex}{abntex}{abntex2}{trabalho acadêmico}, 
		colorlinks=true,       	% false: boxed links; true: colored links
    	linkcolor=blue,          	           % color of internal links
    	citecolor=blue,        		% color of links to bibliography
    	filecolor=magenta,      		% color of file links
		urlcolor=blue,
		bookmarksdepth=4
}
\makeatother
% --- 

% --- 
% Espaçamentos entre linhas e parágrafos 
% --- 

% O tamanho do parágrafo é dado por:
\setlength{\parindent}{1.3cm}

% Controle do espaçamento entre um parágrafo e outro:
\setlength{\parskip}{0.2cm}  % tente também \onelineskip

% ---
% compila o indice
% ---
\makeindex
% ---

% ----
% Início do documento
% ----
\begin{document}

% Retira espaço extra obsoleto entre as frases.
\frenchspacing 

% ----------------------------------------------------------
% ELEMENTOS PRÉ-TEXTUAIS
% ----------------------------------------------------------
% \pretextual

% ---
% Capa
% ---
\imprimircapa
% ---

% ---
% Folha de rosto
% ---
\imprimirfolhaderosto
% ---

% ---
% Dedicatória
% ---
\begin{dedicatoria}
   \vspace*{\fill}
   \centering
   \noindent
   \textit{ Este trabalho é dedicado às crianças adultas que,\\
   quando pequenas, sonharam em se tornar cientistas.} \vspace*{\fill}
\end{dedicatoria}
% ---

% ---
% Agradecimentos
% ---
\begin{agradecimentos}
Os agradecimentos principais são direcionados à Gerald Weber, Miguel Frasson,
Leslie H. Watter, Bruno Parente Lima, Flávio de Vasconcellos Corrêa, Otavio Real
Salvador, Renato Machnievscz\footnote{Os nomes dos integrantes do primeiro
projeto abn\TeX\ foram extraídos de
\url{http://codigolivre.org.br/projects/abntex/}} e todos aqueles que
contribuíram para que a produção de trabalhos acadêmicos conforme
as normas ABNT com \LaTeX\ fosse possível.

Agradecimentos especiais são direcionados ao Centro de Pesquisa em Arquitetura
da Informação\footnote{\url{http://www.cpai.unb.br/}} da Universidade de
Brasília (CPAI), ao grupo de usuários
\emph{latex-br}\footnote{\url{http://groups.google.com/group/latex-br}} e aos
novos voluntários do grupo
\emph{\abnTeX}\footnote{\url{http://groups.google.com/group/abntex2} e
\url{http://abntex2.googlecode.com/}}~que contribuíram e que ainda
contribuirão para a evolução do \abnTeX.
\end{agradecimentos}
% ---

% ---
% Epígrafe
% ---
\begin{epigrafe}
    \vspace*{\fill}
	\begin{flushright}
		\textit{``Não vos amoldeis às estruturas deste mundo, \\
		mas transformai-vos pela renovação da mente, \\
		a fim de distinguir qual é a vontade de Deus: \\
		o que é bom, o que Lhe é agradável, o que é perfeito.\\
		(Bíblia Sagrada, Romanos 12, 2)}
	\end{flushright}
\end{epigrafe}
% ---

% ---
% RESUMOS
% ---
% resumo em português
\setlength{\absparsep}{18pt} % ajusta o espaçamento dos parágrafos do resumo
\begin{resumo}
Com o crescimento do uso de dispositivos móveis como \emph{smartphones} e
\emph{tablets}, aumenta-se cada vez mais o número de aplicações distribuídas
para essas plataformas. Uma vez que cada fabricante utiliza uma arquitetura computacional
distinta em seus dispositivos, requere-se que os desenvolvedores saibam
desenvolver o código utilizando as interfaces e tecnologias particulares de cada
um deles, para que esses aplicativos possam ser utilizados em larga escala. Seria interessante, portanto,
a utilização de uma tecnologia de desenvolvimento comum a várias plataformas,
de forma a diminuir o custo de replicação do código. O objetivo deste trabalho
é o de desenvolver uma aplicação simples que possa ser executada tanto em
plataformas \emph{Desktop}, quanto em plataformas móveis que utilizem
o sistema operacional \emph{Android}, por meio do novo suporte do
ambiente de desenvolvimento \emph{Qt} para essa plataforma, e analisar
o custo de gerar o executável para as plataformas \emph{Android} com relação
às plataformas \emph{Desktop}.

\textbf{Palavras-chaves}: engenharia de software. Qt. Android.
						  dispositivos móveis. portabilidade.
\end{resumo}

% inserir lista de ilustrações
% ---
\pdfbookmark[0]{\listfigurename}{lof}
\listoffigures*
\cleardoublepage
% ---

% % ---
% % inserir lista de tabelas
% % ---
% \pdfbookmark[0]{\listtablename}{lot}
% \listoftables*
% \cleardoublepage
% % ---

% ---
% inserir lista de abreviaturas e siglas
% ---
% \begin{siglas}
%   \item[Fig.] Area of the $i^{th}$ component
%   \item[456] Isto é um número
%   \item[123] Isto é outro número
% %  \item[lauro cesar] este é o meu nome
% \end{siglas}
% ---

% ---
% inserir lista de símbolos
% ---
% \begin{simbolos}
%   \item[$ \Gamma $] Letra grega Gama
%   \item[$ \Lambda $] Lambda
%   \item[$ \zeta $] Letra grega minúscula zeta
%   \item[$ \in $] Pertence
% \end{simbolos}
% ---

% ---
% inserir o sumario
% ---
\pdfbookmark[0]{\contentsname}{toc}
\tableofcontents*
\cleardoublepage
% ---

% ----------------------------------------------------------
% ELEMENTOS TEXTUAIS
% ----------------------------------------------------------
\textual

% ----------------------------------------------------------
% Capítulo 1 - Introdução
% ----------------------------------------------------------
\chapter{Introdução}

% \emph{Informação e documentação
% - Trabalhos acadêmicos - Apresentação}
% \citeonline{abntex2classe}.
Hoje a sociedade participa de um grande crescimento da utilização de dispositivos
móveis como \emph{tablets} e \emph{smartphones}, principalmente devido às melhorias
em seu desempenho computacional e ao maior acesso a redes sem fio, possibilitando
ao usuário a utilização de serviços por meio da Internet e sincronização de dados
de modo fácil em diversos lugares, inclusive enquanto se desloca. A utilização de aplicativos para esses
equipamentos torna-se, portanto, cada vez mais comum, e o mercado de desenvolvimento
voltado a essas plataformas tende a crescer. 

Um grande problema enfrentado pelos desenvolvedores
desse tipo de aplicativo, no entanto, é o da portabilidade, uma vez há diversas
arquiteturas computacionais no mercado, com diferentes famílias de processador,
sistema operacional, interfaces de desenvolvimento (\emph{Software Development Kits}, ou
\emph{SDKs}), linguagens de programação e ambientes de desenvolvimento. Desenvolver
o mesmo aplicativo para diversas plataformas pode, então,  demandar a replicação do código para cada uma das plataformas alvo, e por isso o custo de desenvolvimento pode ser alto, devido à necessidade de reimplementação.

É desejável, portanto, que haja um método comum de desenvolvimento
capaz de gerar executáveis para o maior número possível de arquiteturas, sem que haja replicação de código que implemente a mesma funcionalidade, em 
tecnologias diferentes.

\section{As diferentes arquiteturas computacionais}
Na classe de plataformas \emph{Desktop} pode-se citar como exemplo os já
tradicionais sistemas operacionais multitarefas como \emph{Windows}, \emph{OS X} e as diversas variações \emph{Unix}. Para as plataformas móveis, alguns exemplos são o \emph{Android}, o \emph{iOS} e o \emph{BlackBerry OS}. Cada um desses sistemas operacionais possuem o seus próprios \emph{kits} de desenvolvimento, fornecedores de ferramentas de desenvolvimento e bibliotecas de programação responsáveis por fornecer recursos como acesso a arquivos do sistema, serviços de rede, criação de interfaces gráficas entre outros.

Além de diferentes sistemas operacionais, cada dispositivo possui um processador com o seu próprio conjunto de instruções, o que requer que haja um compilador para cada uma das famílias de processadores alvo.

Uma forma de se esquivar dessas diferenças de sistema operacional e família de processadores é utilizar uma camada de aplicação que faça a mediação entre a aplicação final e o sistema operacional. É o método utilizado pelas arquiteturas baseadas na tecnologia \emph{Java}, que utilizam uma máquina virtual para interpretar o código escrito na linguagem \emph{Java}. Dessa forma, é possível gerar apenas um executável que será portável para qualquer plataforma, desde que a instância onde a aplicação será executada possua uma instância dessa máquina virtual em execução.

\section{O sistema operacional Android}
%http://www.openhandsetalliance.com/android_overview.html
%http://source.android.com/
%http://source.android.com/source/index.html
%http://developer.android.com/training/index.html
%http://source.android.com/devices/tech/dalvik/
%http://developer.android.com/tools/sdk/ndk/index.html
O \emph{Android} é um sistema operacional de código aberto baseado no \emph{kernel} do sistema \emph{Linux}, projetado para ser usado em dispositivos móveis como \emph{tablets} e \emph{smartphones}, e liderado pela \emph{Google}.

O objetivo era criar um sistema operacional aberto, acessível e flexível
para uma grande gama de dispositivos móveis, permitindo a criação de aplicações com total acesso aos recursos do sistema por qualquer desenvolvedor.

As aplicações normalmente são desenvolvidas em linguagem \emph{Java} utilizando
o pacote de desenvolvimento (\emph{SDK}) fornecido pelos responsáveis
pela plataforma. Essas aplicações são executadas pela máquina virtual \emph{Java} (Dalvik), parte do sistema operacional. É possível utilizar código nativo
(em C/C++) para o desenvolvimento de aplicações por meio do pacote \emph{Android NDK}, também fornecido pela plataforma. Esse código nativo é executado
fora da máquina virtual, diretamente sobre o sistema operacional \emph{Android},
e normalmente é utilizado por aplicações que possuem um alto processamento
computacional, pois podem se beneficiar da maior rapidez de execução de código
nativo, em comparação com o maior custo resultante da execução sobre
a máquina virtual.


%TODO
%Impotante falar dos níveis de API e do Android-SDK.

\section{O \emph{Qt}}
Um dos principais objetivos da tecnologia \emph{Qt} é oferecer portabilidade. Isso é, que o mesmo código possa ser distribuído a várias plataformas, fornecendo uma interface de programação para o desenvolvedor, independente da plataforma alvo.
Dessa forma, ao invés de se preocupar com os detalhes de baixo nível de implementação, como chamadas diretas ao sistema operacional, o programador
desenvolve utilizando conceitos genéricos, traduzidos em módulos fornecidos pelo \emph{Qt}, deixando o mecanismo de construção do \emph{Qt} responsável por gerar o executável para cada plataforma desejada, fazendo a conexão dos módulos de baixo nível necessários.

%TODO: http://qt-project.org/doc/qt-5.0/qtdoc/platform-details.html
%https://qt-project.org/doc/qt-5.1/qtdoc/supported-platforms.html
%http://qt-project.org/wiki/New-Features-in-Qt-5.2
%http://necessitas.kde.org/ : ese link fala, inclusive, de como
%é feita a integração para o Android, usando a native interface,
%e um wrapper Java.
Até a versão 5.0, o \emph{Qt} fornecia suporte apenas às plataformas \emph{Desktop} \emph{Windows}, \emph{Linux}, e \emph{OS X}, e a outras plataformas de tempo real e para sistemas embutidos. Já existia a possibilidade de se desenvolver para \emph{Android} utilizando uma ferramenta auxiliar chamada \emph{Necessitas SDK}, desenvolvida pela comunidade do \emph{KDE}. A partir da versão 5.1, o suporte às plataformas \emph{Android} e \emph{iOS} foi adicionado diretamente ao \emph{Qt} como \emph{"technology preview"}. Para a versão 5.2, disponível apenas na versão beta até a data deste documento, ambas as plataformas serão oficialmente suportadas.

A relevância desse novo suporte a essas plataformas, que juntas compõem grande parte da divisão de mercado de dispositivos móveis, é a de que será possível criar aplicações para a maior parte desses dispositivos utilzados, conhecendo-se apenas os métodos de desenvolvimento do \emph{Qt}. Assim fica transparente ao desenvolvedor as interfaces de desenvolvimento oferecidas pelas organizações responsáveis por cada um desses sistemas operacionais. Dessa forma, um mesmo código fonte poderá dar origem a executáveis para plataformas diferentes.



%TODO: falar mais sobre portabilidade de software, e colocar algum link
%de referência, de preferência do IEEE.



% \footnote{\url{http://www.latex-project.org/lppl.txt}}.

% ----------------------------------------------------------
% Capítulo 2 - Metodologia
% ----------------------------------------------------------
\chapter{Metodologia}
O objetivo deste capítulo é o de introduzir as bases para o desenvolvimento do aplicativo correspondente a este trabalho, explicitando as tecnologias e modelos utilizados.

\section{Controle de Versão}
Durante o desenvolvimento foi utilizada a ferramenta \emph{Mercurial} para o
controle de versões do código, utilizando o \emph{Google Code} como repositório central. Em engenharia de software é importante utilizar esse tipo
de ferramenta por vários motivos:
\begin{itemize}
\item Gerir as alterações no código;
\item Poder reverter o código a uma versão estável, caso uma modificação   cause uma falha;
\item Poder realizar mudanças no código facilmente de qualquer computador;
\item Facilitar a tarefa de \emph{backup} do código, já que não é necessário
      empacotar todos os arquivos e fazer upload, que é uma tarefa tediosa
      a ser realizada com frequência. Com apenas dois comandos é possível
      salvar as mudanças no código e atualizá-lo no repositório central,
      hospedado na \emph{web};
\item Para desenvolvimento de software em equipe, ela auxilia no desenvolvimento concorrente, facilitando a integração de código.
\end{itemize}
% ---
\section{Ambiente de desenvolvimento : \emph{Qt Creator}}
%http://qt-project.org/wiki/Category:Tools::QtCreator
O Qt Creator é o ambiente de desenvolvimento integrado (\emph{IDE}) fornecido pelo \emph{Qt}, e oferece recursos como realce de sintaxe, criação de projetos a partir de moldes pré-definidos (por exemplo: aplicações de linha de comando, aplicações com interface gráfica, entre outros), compilação e construção de código, além de outros recursos.

A utilização dessa ferramenta acelera bastante o desenvolvimento, pois permite que o desenvolvedor concentre-se predominantemente no código, ao invés de se preocupar com tarefas de baixo nível como compilar e construir a aplicação. No caso do desenvolvimento para as plataformas móveis \emph{Android} e \emph{iOS}, a sua utilização é ainda mais desejável, pois elas demandam a utilização de várias ferramentas responsáveis por gerar o código adicional de integração com a aplicação escrita pelo desenvolvedor, detecção de dispositivos conectados, e a implantação da aplicação final no dispositivo desejado. Ter que lidar com essas tarefas manualmente tornaria o desenvolvimento mais difícil e mais custoso.

Para o desenvolvimento deste trabalho utilizou-se a versão 5.2 Beta do \emph{Qt} e e 3.0 Beta do \emph{Qt Creator}. 
% ---
% ---
\section{Ferramentas auxiliares necessárias para integração com o \emph{Android}}
A arquitetura de uma aplicação para \emph{Android} criada com o \emph{Qt} é composta de uma camada em código nativo (C/C++) e de uma camada em \emph{Java}, que serve como porta da entrada para a aplicação.

A camada em \emph{Java} serve como ponto de entrada para a aplicação no 
dispositivo \emph{Android}, e é necessária porque os aplicativos para essa
plataforma são escritos nessa linguagem, pois devem rodar sobre a máquina
virtual.

%http://developer.android.com/training/articles/perf-jni.html
%developer.android.com/tools/sdk/ndk/index.html
O código original desenvolvido em \emph{C++} utilizando os módulos do \emph{Qt} é transformado numa biblioteca em código nativo, e é chamado pela camada \emph{Java} através da interface \emph{Java Native Interface} fornecida
por meio do pacote \emph{Android NDK}. Essa interface permite a interação
de código \emph{Java}, rodando sobre a máquina virtual, com código nativo,
rodando direto sobre o sistema operacional (no caso o \emph{Android}).

Para que essas tarefas possam ser executadas automaticamente pelo \emph{Qt Creator}, as seguinte ferramentas devem ser instaladas no sistema de desenvolvimento, e referenciadas no \emph{Qt Creator}:
\begin{itemize}
%http://ant.apache.org/
\item \emph{Apache Ant} : ferramenta para construção de código \emph{Java};
\item \emph{Android SDK} : pacote de desenvolvimento de aplicações para \emph{Android}, com ferramentas e bibliotecas de programação específicos para \emph{Android}. Permite a instalação
dos diversos níveis de API do \emph{Android}, bem como a criação de emuladores;
\item \emph{Android NDK} : pacote com os recursos para interação de código
\emph{Java} com código nativo;
\item \emph{Java Development Kit} : pacote que possui as ferramentas e bibliotecas necessárias para o desenvolvimento de aplicações \emph{Java}; 
\end{itemize}

Para este trabalho foram utilizadas as seguintes versões das ferramentas:
\begin{itemize}
\item Apache Ant 1.9.2;
\item Android SDK para níveis de API 10 e 16;
\item Android NDK;
\item Oracle Java Development Kit 1.7.0;
\end{itemize}
%Falar do Ant, Java Development Kit, Android SDK, Android NDK, Java Native Interface, Necessitas.

% ---
\section{QML e Qt Quick}
O \emph{QML} (\emph{Qt Modeling Language}) é uma linguagem declarativa de alto nível criada pelo \emph{Qt} baseada no \emph{JavaScript}. É orientada a elementos e propriedades, numa estrutura hierárquica, e permite a descrição
de interfaces de usuário.

\emph{Qt Quick} é uma tecnologia que permite ao desenvolvedor
descrever interfaces de usuário utilizando o \emph{QML}, e possui uma coleção
de elementos gráficos e módulos de integração com o código em C++. Com ela, é
possível criar o comportamento do código em \emph{C++} e descrever a interface gráfica em \emph{QML}, e é utilizada principalmente para a criação de interfaces para dispositivos móveis.

Uma vez que a sintaxe do \emph{QML} não é muito complexa, essa tecnologia permite que o projetista de interface para o usuário trabalhe separadamente do programador.
%http://qt-project.org/doc/qt-4.8/qml-intro.html
%http://qt-project.org/doc/qt-4.8/qmlsyntax.html


\section{Mecanismo Modelo-Visão-Controle}
O \emph{MVC} (\emph{Model View Control}) é um mecanismo de desenho de
\emph{software} popularmente conhecido. Seu objetivo é separar a visão (
interface com o usuário) do modelo computacional que implementará as funcionalidades do programa. Esse desacoplamento entre modelo e interface
permite que o desenvolvimento da aplicação possa ser separada em duas
camadas independentes, permitindo inclusive a troca de uma delas
sem que grande parte do código tenha que ser alterado para refletir a troca.

Com esse mecanismo é possível, por exemplo, definir o modelo computacional
de uma aplicação, e desenvolver interfaces gráficas de usuário diferentes
para cada plataforma. Também permite que a tarefa de programação
seja realizada em paralelo com a tarefa de desenho da interface gráfica.
%A introdução do livro An Introduction to Design Patterns with Qt
%fala coisas sensacionais pra eu colocar aqui.


% ----------------------------------------------------------
% Capítulo 3 - Resultados e Discussao
% ----------------------------------------------------------
\chapter{Resultados e Discussão}
Neste capítulo são evidenciados e discutidos os resultados obtidos, e as
dificuldades encontradas durante este trabalho. O objetivo é o de se avaliar o grau de portabilidade de uma aplicação escrita utilizando a plataforma \emph{Qt} para ambientes \emph{Desktop} e \emph{Android}, implementando uma aplicação simples que utiliza recursos de rede.

O aplicativo desenvolvido foi um cliente de mensagens instantâneas
multiplataforma e simples, com a finalidade de verificar a funcionalidade
das aplicações escritas no ambiente \emph{Qt} em dispositivos \emph{Android},
e qual o esforço adicional em relação ao desenvolvimento para \emph{Desktop}.

Excluindo o esforço inicial para instalação e configuração das ferramentas específicas para o desenvolvimento para \emph{Android}, o esforço adicional
em comparação com o desenvolvimento para \emph{Desktop} foi muito baixo,
pois o código
utilizado foi exatamente o mesmo tanto para a construção para \emph{Desktop}
quanto para \emph{Android}.

O resultado foi um aplicativo com uma interface gráfica bem simples,
e que utiliza a tecnologia TCP/IP para se conectar a outro cliente
e realizar a troca mensagens. O aplicativo resultante serve como prova de conceito ao desenvolvimento para \emph{Android} utilizando a tecnologia
\emph{Qt}. O nome dado para a aplicação foi \emph{CuteDroid Messenger},
escolhido devido a união da tecnologia \emph{Qt} (pronunciado
como \emph{"Cute"}) e \emph{Android}, abreviado aqui como \emph{"Droid"}.

Para execução do aplicativo foram usados um \emph{tablet} modelo \emph{Transformer Prime Tf202}, da \emph{ASUS}, rodando o sistema operacional
\emph{Android} versão 4.1 (nível de API 16), um dispositivo celular \emph{Samsung Galaxy Y}, com \emph{Android} versão 2.3.3 (nível de API 10) e um \emph{Desktop} rodando
o sistema operacional \emph{Linux}, distribuição \emph{Ubuntu}.
%http://www.asus.com/Tablets_Mobile/Eee_Pad_Transformer_Prime_TF201/



\section{Funcionamento da aplicação}
A aplicação utiliza a tecnologia \emph{TCP/IP} para se conectar a outro cliente
semelhante e iniciar a troca de mensagens. Para se conectar, o usuário
deve inserir no campo cujo valor inicial é \emph{"localhost"} o endereço \emph{IP} do dispositivo correspondente ao cliente com o qual se deseja comunicar e clicar no botão \emph{"Connect"}. Se o outro cliente já houver iniciado a conexão, ambos irão se conectar, caso contrário, o cliente em questão irá entrar em estado de espera, aguardando que o outro se conecte. Assim que ambos
estiverem conectados, será possível realizar a troca de mensagens. As figuras
exibem a tela
da aplicação nas plataformas \emph{Android} e \emph{Desktop}, respectivamente.

A porta \emph{TCP} 5440 foi escolhida como padrão para a comunicação e é codificada diretamente no código da aplicação.

\begin{figure}[H] 
\label{fig:cutedroid_tablet}
\center
\includegraphics[scale=0.2]{./figures/tablet/5-enviando}                                                                                                  
\center\caption{Aparência do aplicativo na tela do tablet utilizado
 para o experimento. Nesse estágio, os clientes já estão conectados
 e já trocaram mensagens}.
\end{figure}

\begin{figure}[H] 
\label{fig:cutedroid_desktop}
\center
\includegraphics[scale=0.7]{./figures/desktop/4-msgs}
\center\caption{Aparência do aplicativo no Desktop, tambén no estágio
em que os clientes já trocaram mensagens.}
\end{figure}

\begin{figure}[H] 
\label{fig:tablet_keyboard}
\center
\includegraphics[scale=0.7]{./figures/desktop/4-msgs}
\center\caption{Teclado de entrada de texto do Android, ao selecionar
a caixa de texto com o IP a se conectar e editá-lo.}
\end{figure}


\section{Dificuldades enfrentadas durante o desenvolvimento}
Durante a fase de aprendizado foram encontradas
muitas dificuldades, principalmente devido à falta de documentação do \emph{Qt}
com respeito ao desenvolvimento para \emph{Android}, e às poucas
respostas obtidas nos fóruns oficiais. Outra dificuldade foi a dificuldade
de utilizar emuladores para executar e testar a aplicação, que são muito
custosos computacionalmente. Geralmente é mais desejável testar as aplicações diretamente em um dispositivo físico.

Os maiores problemas se deram na fase de implantação do aplicativo no dispositivo \emph{Android} (\emph{"Deploy to Android device"}), que é a fase
na qual o \emph{Qt Creator} gera o código automático que será transformado
junto com o código da aplicação, no pacote final (\emph{.apk}), que é então carregado no dispositivo. 

Nesta etapa houve problemas com os alvos de API nível 10 (Android 2.3), bem como de projetos com caracteres especiais no nome (por exemplo, o hífen) criados no \emph{Qt Creator}. Este último acontece porque no código \emph{Java} gerado automaticamente pelo ambiente de desenvolvimento, um módulo com o nome do projeto é criado, e esse não pode conter caracteres especiais, já que é uma declaração dentro
do código \emph{Java}. Para o problema relacionado à API nível 10 não há, até
a escrita deste documento, uma resposta sobre como corrigí-lo. Segundo a documentação do \emph{Qt} o menor nível de API suportado é o 10. Alguns tópicos foram abertos nos fóruns do \emph{Qt} sobre esse problema:
%http://qt-project.org/forums/viewthread/33592/ 
%http://qt-project.org/forums/viewthread/34021/
%http://qt-project.org/forums/viewthread/33682/
%http://qt-project.org/forums/viewthread/34968/





%Citar as threads do forum relacionadas
%Problema com o nível de API 10.
%Problema com "-" no nome do projeto, e a linha de package.
%Problema com o emulador que é muito pesado.


% ---

% ----------------------------------------------------------
% Capítulo 4 - Conclusões
% ----------------------------------------------------------
\chapter{Conclusões}
O projeto desenvolvido resultou num aplicativo de mensagens instantâneas,
utilizando os protocolos de rede \emph{TCP/IP}, e com interface gráfica
criada utilizando o \emph{QML} do \emph{Qt}, que pode ser distribuído
tanto para ambientes \emph{Desktop} quanto \emph{Android}. 

O custo de desenvolvimento adicional para \emph{Android} em relação
ao desenvolvimento para \emph{Desktop}, após o custo inicial de instalação
das ferramentas e aprendizado do processo, foi nulo, uma vez que se utilizou
exatamente o mesmo código para ambas plataformas, e o \emph{Qt Creator} se encarregou dos passos adicionais necessários para implantação da aplicação
no dispositivo \emph{Android}.

Para desenvolvimento de um produto comercial, no entanto, poderia ser desejável
que a interface gráfica no dispositivo \emph{Android} fosse diferente
da interface no ambiente \emph{Desktop}, para se obter melhor usabilidade em
ambos os ambientes. Para isso, o custo não seria tão alto, devido ao mecanismo
de desacoplamento entre o modelo computacional e a interface do usuário, bastando que outra interface fosse descrita utilizando o \emph{QML} e integrando-a ao mesmo código em \emph{C++}.

\section{Trabalhos futuros}
Trabalhos futuros poderiam abordar os seguintes temas:
\begin{itemize}
\item Melhora do aspecto visual e usabilidade, tornando o aplicativo mais atraente ao usuário;
\item Adição de novas funcionalidades : o aplicativo desenvolvido neste
trabalho possui poucos recursos. Poderiam ser adicionados recursos de multimídia, como áudio, vídeo e fotos, lista de amigos,
possibilidade de criar grupos de bate-papo, histórico de mensagens, entre outros;
\item Criação de um servidor central para gerenciar contas e mediar
a comunicação entre os clientes, ao invés de se trabalhar diretamente com
endereços \emph{IP};
\item Verificar a portabilidade para \emph{iOS} nas futuras versões
do \emph{Qt};
\item Verificar o funcionamento da aplicação em diversos níveis de \emph{API} do \emph{Android};
\item Desenvolver um processo formal para desenvolvimento de aplicações
para dispositivos móveis utilizando o \emph{Qt}.
\end{itemize}
%Melhorar a interface gráfica
%Adicionar funcionalidades, como a presença de um servidor funcionando
%como roteador, para gerenciar contas;envio de imagens, áudio e vídeo;
%Testar os diferentes níveis de API em emuladores e dispositivos físicos;
%Verificar portabilidade para iOS;
%Utilização de outros módulos, como os de multimídia, Bluetooth, etc.

% ---
% Finaliza a parte no bookmark do PDF, para que se inicie o bookmark na raiz
% ---
\bookmarksetup{startatroot}%
% ---

% ----------------------------------------------------------
% ELEMENTOS PÓS-TEXTUAIS
% ----------------------------------------------------------
\postextual

% ----------------------------------------------------------
% Referências bibliográficas
% ----------------------------------------------------------
\bibliography{references}

% ----------------------------------------------------------
% Apêndices
% ----------------------------------------------------------

% ---
% Inicia os apêndices
% ---
% \begin{apendicesenv}

% % Imprime uma página indicando o início dos apêndices
% \partapendices

% % ----------------------------------------------------------
% \chapter{Quisque libero justo}
% % ----------------------------------------------------------

% \lipsum[50-54]

% % ----------------------------------------------------------
% \chapter{Nullam elementum urna vel imperdiet sodales elit ipsum pharetra}
% % ----------------------------------------------------------
% \lipsum[55-59]

% \end{apendicesenv}
% % ---

% ----------------------------------------------------------
% Anexos
% ----------------------------------------------------------

% ---
% Inicia os anexos
% ---
% \begin{anexosenv}

% % Imprime uma página indicando o início dos anexos
% \partanexos

% % ---
% \chapter{Morbi ultrices rutrum lorem}
% % ---
% \lipsum[60]

% % ---
% \chapter{Cras non urna sed feugiat cum sociis natoque penatibus}
% % ---
% \lipsum[61-63]

% % ---
% \chapter{Fusce facilisis lacinia dui}
% % ---
% \lipsum[64-65]

% \end{anexosenv}

\end{document}
